package com.focus.wecenter.service;

import com.focus.wecenter.web.vo.SearchResult;
import com.focus.wecenter.pojo.Question;
import com.focus.wecenter.util.Message;
import com.focus.wecenter.util.PageBean;
import com.focus.wecenter.web.vo.QuestionPublishForm;
import org.hibernate.criterion.DetachedCriteria;

import java.util.List;

/**
 * 问题模块业务接口
 *
 * @author Lv Jing
 * @date 2018年01月06日 17:33
 */
public interface QuestionService {

    /**
     * 发布问题
     * @param questionPublishForm 问题表单
     * @return 保存的问题
     */
    Question publishQuestion(QuestionPublishForm questionPublishForm);

    /**
     * 分页显示问题
     * @param currentPage 当前页
     * @param pageSize 页面大小
     * @return 分页工具对象
     */
    PageBean<Question> findQuestionByPage(int currentPage, int pageSize);

    /**
     * 根据ID查找问题
     * @param questionID 问题ID
     * @return 问题对象
     */
    Question findQuestionByID(int questionID);

    /**
     * 用户关注或者取关问题
     * @param questionID 问题ID
     * @param userID 用户ID
     * @return 消息对象
     */
    Message focus(int questionID, int userID);

    /**
     * 判断用户是否关注了该问题
     * @param questionID 问题ID
     * @param userID 用户ID
     * @return 是否关注
     */
    boolean isFocus(int questionID, int userID);

    /**
     * 搜索问题
     * @param query 查询关键字
     * @param limit 查询条数
     * @return 搜索结果
     */
    List<SearchResult> searchQuestion(String query, int limit);

    /**
     * 离线分页查询问题
     * @param criteria 离线查询条件
     * @param currentPage 当前页
     * @param pageSize 页面大小
     * @return 分页结果
     */
    PageBean<Question> findByPage(DetachedCriteria criteria, int currentPage, int pageSize);

    /**
     * 分页查询
     * @param criteria 查询条件
     * @param currentPage 当前页
     * @param pageSize 下一页
     * @return  分页结果
     */
    List<Question> findByPageWithList(DetachedCriteria criteria, int currentPage, int pageSize);
}